home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / BASIC / PREP.BAS < prev    next >
BASIC Source File  |  2000-09-29  |  10KB  |  423 lines

  1. $INCLUDE "REGNAMES.INC"
  2.  
  3. %PS = 16384
  4. %A1 = %PS + 00
  5. %A2 = %PS + 02
  6. %A3 = %PS + 04
  7. %A4 = %PS + 06
  8. %A5 = %PS + 08
  9. %A6 = %PS + 10
  10.  
  11. %A6Low = %A6+1
  12. stasten$=" ESC = Ende   A bis F = Laufwerk   X = Format   Y = Quick-Format   Z = Kopieren"
  13. DIM sektoren(5),tracks(5),heads(5),fat(5),sekProCluster(5),ready(5)
  14.  
  15. COLOR 3,1
  16. CLS
  17.  
  18. laufwerk=-1
  19. m=MouseExist
  20. CALL Balken(1,1,"ATUtilities Disk Transfer - Medium-Installation")
  21. LOCATE 2,1
  22. PRINT "Copyright (C) 1993 by Thomas Dreibholz - All rights reserved."
  23.  
  24. REG %AX,(1*256)+29
  25. CALL INTERRUPT &H0B
  26. offset=REG(%DI)
  27.  
  28. IF offset<>-1 THEN
  29.  CALL ZeigeLaufwerke
  30.  CALL Tasten
  31. ELSE
  32.  CALL Balken(5,1,"ATUtilities Disk Transfer ist noch nicht aktiv!")
  33.  CALL Balken(6,1,"Laden Sie zuerst das Utility auf dem Amiga und rufen PREP.EXE erneut auf.")
  34.  CALL Balken(12,1," beliebige Taste = Ende")
  35.  BEEP
  36.  WHILE INKEY$="" AND Click=0 : WEND
  37. END IF
  38.  
  39. CALL MouseOff
  40. COLOR 15,0
  41. CLS
  42. END
  43.  
  44.  
  45. SUB ZeigeLaufwerke SHARED
  46.  DEF SEG = &HD400
  47.  
  48.  LOCATE 4,1
  49.  FOR i=0 TO 5
  50.   POKEI offset+%A1,100
  51.   POKEI offset+%A2,i
  52.   CALL CallAndWait
  53.  
  54.   PRINT CHR$(65+i);"   Laufwerk";i+1;":  ";
  55.   IF PEEKI(offset+%A2)=0 THEN
  56.    POKEI offset+%A1,5
  57.    CALL CallAndWait
  58.  
  59.    DEF SEG = &HD400
  60.    sektoren(i)=PEEKI(offset+%A2)
  61.    tracks(i)=PEEKI(offset+%A3)
  62.    heads(i)=PEEKI(offset+%A4)
  63.    fat(i)=PEEKI(offset+%A5)
  64.    sekProCluster(i)=PEEK(offset+%A6Low)
  65.    CALL XPrint("Sektoren:",sektoren(i),6,5)
  66.    CALL XPrint("Spuren:",tracks(i),6,5)
  67.    CALL XPrint("S/L-K”pfe:",heads(i),4,5)
  68.    ready(i)=1
  69.   ELSE
  70.    ready(i)=0
  71.    PRINT "Nicht verfgbar";
  72.   END IF
  73.   PRINT ""
  74.  NEXT
  75. END SUB
  76.  
  77. SUB Tasten SHARED
  78.  CALL Balken(11,1,stasten$)
  79.  
  80.  ende=1
  81.  WHILE ende=1
  82.   i$=""
  83.   CALL MouseStatus(x,y,t)
  84.   WHILE i$="" AND t=0
  85.    i$=INKEY$
  86.    CALL MouseStatus(x,y,t)
  87.   WEND
  88.   IF i$=CHR$(27) THEN ende=0
  89.   i$=UCASE$(i$)
  90.   IF i$>="A" AND i$<="F" THEN
  91.    CALL Bearbeite(ASC(i$)-65)
  92.   ELSEIF i$="X" THEN
  93.    CALL Formatiere(0)
  94.   ELSEIF i$="Y" THEN
  95.    CALL Formatiere(1)
  96.   ELSEIF i$="Z" THEN
  97.    CALL Kopiere
  98.   ELSEIF t<>0 THEN
  99.     CALL MouseWait
  100.     y=y/8 : x=x/8
  101.     IF y>=3 AND y<=8 THEN
  102.      CALL Bearbeite(y-3)
  103.     ELSEIF y=10 THEN
  104.       IF x>=1 AND x<=10 THEN
  105.       ende=0
  106.      ELSEIF x>=35 AND x<=44 THEN
  107.       CALL Formatiere(0)
  108.      ELSEIF x>=48 AND x<=63 THEN
  109.       CALL Formatiere(1)
  110.      ELSEIF x>=67 AND x<=78 THEN
  111.       CALL Kopiere
  112.      END IF
  113.     END IF
  114.   END IF
  115.  WEND
  116. END SUB
  117.  
  118. SUB XPrint(text$,zahl,stellen,leer) SHARED
  119.  PRINT text$;
  120.  x$=STR$(zahl)
  121.  x$=STRING$(stellen-LEN(x$)," ")+x$
  122.  PRINT x$;
  123.  PRINT SPC(leer)
  124. END SUB
  125.  
  126. SUB CallAndWait SHARED
  127.  REG %AX,(7*256)+29
  128.  CALL INTERRUPT &H0B
  129.  REG %AX,(8*256)+29
  130.  CALL INTERRUPT &H0B
  131. END SUB
  132.  
  133. SUB Kopiere SHARED
  134.  wahl=-1
  135.  IF laufwerk<>-1 THEN
  136.   ltasten$=" ESC = Zurck    A bis F = Ziellaufwerk w„hlen    "
  137.   CALL Balken(11,1,ltasten$)
  138.   l$="Bitte geben Sie das Ziellaufwerk an: "
  139.   CALL Balken(21,1,l$+"_")
  140.   ende2=1
  141.   WHILE ende2=1
  142.    i$="" : t=0
  143.    WHILE i$="" AND t=0
  144.     i$=INKEY$
  145.     CALL MouseStatus(mx,my,t)
  146.    WEND
  147.    IF t<>0 THEN
  148.     CALL MouseWait
  149.     mx=mx/8
  150.     my=my/8
  151.    END IF
  152.    IF i$=CHR$(27) OR (t<>0 AND my=10 AND mx>=1 AND mx<=12) THEN ende2=0 : wahl=-1
  153.    IF wahl<>-1 AND (i$=CHR$(13) OR (t<>0 AND my=10 AND mx>=51 AND mx<=73)) THEN ende2=0
  154.    i$=UCASE$(i$)
  155.    IF i$>="A" AND i$<="F" OR (t<>0 AND my>=3 AND my<=8) THEN
  156.     IF i$>="A" AND i$<="F" THEN
  157.      num=ASC(i$)-65
  158.     ELSE
  159.      num=my-3 : i$=CHR$(num+65)
  160.     END IF
  161.     IF ready(num)=1 AND num<>laufwerk THEN
  162.      CALL Balken(21,1,l$+i$)
  163.      wahl=num
  164.      CALL Balken(11,1,ltasten$+" Eingabetaste = Kopieren")
  165.     ELSE
  166.      SOUND 1500,2
  167.     END IF
  168.    END IF
  169.   WEND
  170.   CALL EntfBalken(21,1)
  171.  END IF
  172.  IF wahl<>-1 THEN
  173.   t$=""
  174.   IF sektoren(laufwerk)<>sektoren(wahl) THEN
  175.    t$="Quelllaufwerk und Ziellaufwerk haben eine unterschiedliche Sektorenanzahl"
  176.   END IF
  177.   IF tracks(laufwerk)<>tracks(wahl) THEN
  178.    t$="Quelllaufwerk und Ziellaufwerk haben eine unterschiedliche Spurenanzahl"
  179.   END IF
  180.   IF heads(laufwerk)<>heads(wahl) THEN
  181.    t$="Quelllaufwerk und Ziellaufwerk haben unterschiedlich viele S/L-K”pfe"
  182.   END IF
  183.   IF t$="" THEN
  184.    CALL SelectDrive(laufwerk)
  185.    FOR i=0 TO tracks(laufwerk)-1
  186.     CALL Balken(21,1,"Kopiere Track"+STR$(i+1)+" von"+STR$(tracks(laufwerk))+".")
  187.     CALL Copy(i,wahl)
  188.     x=PEEKI(offset+%A2)
  189.     IF x<>0 THEN
  190.      IF x=1 THEN t$="Nicht genug Chip-Speicher fr Spur."
  191.      IF x=2 THEN t$="Fehler beim Lesen der Spur. (CMD_READ/Read())."
  192.      IF x=3 THEN t$="Fehler beim Schreiben der Spur (TD_FORMAT/Write())."
  193.      IF x=4 THEN t$="Fehler beim šberprfen der Spur (CMD_READ)."
  194.      BEEP
  195.      CALL Balken(11,1," beliebige Taste = Zurck")
  196.      CALL Balken(21,1,"Fehler beim Kopieren von Spur"+STR$(i+1)+".")
  197.      CALL Balken(22,1,t$)
  198.      WHILE INKEY$="" AND Click=0 : WEND
  199.      CALL EntfBalken(21,1)
  200.      CALL EntfBalken(22,1)
  201.      GOTO Fertig
  202.     END IF
  203.    NEXT
  204.   ELSE
  205.    BEEP
  206.    CALL Balken(11,1," beliebige Taste = Zurck")
  207.    CALL Balken(21,1,t$)
  208.    WHILE INKEY$="" AND Click=0 : WEND
  209.   END IF
  210.   CALL EntfBalken(21,1)
  211. Fertig:
  212.   CALL Balken(11,1,stasten$)
  213.  ELSE
  214.   SOUND 2000,2
  215.  END IF
  216. END SUB
  217.  
  218. SUB Bearbeite(num) SHARED
  219.  LOCATE 13,1
  220.  IF ready(num)=1 THEN
  221.   laufwerk=num
  222.   PRINT "Aktives Laufwerk:";num+1
  223.   fSektoren=sektoren(num)
  224.   fTracks=tracks(num)
  225.   fHeads=heads(num)
  226.   fFATSektoren=fat(num)
  227.   fSekProCluster=sekProCluster(num)
  228.   LOCATE 15,1
  229.   PRINT "Sektoren=        ";fSektoren
  230.   PRINT "Spuren=          ";fTracks
  231.   PRINT "S/L-K”pfe=       ";fHeads
  232.   PRINT "FAT-Sektoren=    ";fFATSektoren
  233.   PRINT "Sektoren/Cluster=";fSekProCluster
  234.  ELSE
  235.   SOUND 1500,2
  236.  END IF
  237. END SUB
  238.  
  239. SUB Balken(z,s,text$) SHARED
  240.  LOCATE z,s
  241.  COLOR 3,6
  242.  PRINT text$+STRING$(80-LEN(text$)," ")
  243.  COLOR 3,1
  244. END SUB
  245.  
  246. SUB EntfBalken(z,s) SHARED
  247.  LOCATE z,s
  248.  PRINT STRING$(80," ")
  249. END SUB
  250.  
  251. SUB Formatiere(quick) SHARED
  252.  IF laufwerk<>-1 THEN
  253.   CALL Balken(11,1," Y = Formatierung starten   N = Zurck")
  254.   CALL Balken(21,1,"Wollen Sie das Medium wirklich Formatieren ?")
  255.   CALL Balken(22,1,"Alle gesicherten Daten werden gel”scht! [Y/N]")
  256.   ende1=1
  257.   WHILE ende1=1
  258.    i$="" : t=0
  259.    WHILE i$="" AND t=0
  260.     i$=INKEY$
  261.     CALL MouseStatus(mx,my,t)
  262.    WEND
  263.    i$=UCASE$(i$)
  264.    CALL EntfBalken(21,1)
  265.    CALL EntfBalken(22,1)
  266.    mx=mx/8 : my=my/8
  267.    IF i$="Y" OR (t<>0 AND my=10 AND mx>=1 AND mx<=24) THEN
  268.     CALL Balken(21,1,"Das Medium wird formatiert. Bitte warten ...")
  269.     CALL SelectDrive(laufwerk)
  270.     IF quick=0 THEN
  271.      FOR i=0 TO fTracks-1
  272.       CALL Balken(22,1,"Formatiere Spur"+STR$(i+1)+" von"+STR$(fTracks)+".")
  273.       CALL Format(i)
  274.       x=PEEKI(offset+%A2)
  275.       IF x<>0 THEN
  276.        BEEP
  277.        CALL Balken(11,1," beliebige Taste = Zurck")
  278.        CALL Balken(21,1,"Fehler beim Formatieren von Spur"+STR$(i+1)+".")
  279.        IF x=1 THEN t$="Nicht genug Chip-Speicher fr Spur."
  280.        IF x=2 THEN t$="Fehler beim Formatieren (TD_FORMAT)."
  281.        IF x=3 THEN t$="Fehler beim šberprfen (CMD_READ)."
  282.        CALL Balken(22,1,t$)
  283.        WHILE INKEY$="" AND Click=0 : WEND
  284.        GOTO Okay
  285.       END IF
  286.      NEXT
  287.     END IF
  288.  
  289.     REM Boot-Sektor schreiben
  290.     POKE offset+&H00,0
  291.     POKE offset+&H01,0
  292.     POKE offset+&H02,0
  293.     i$="-TD- 1.0"
  294.     FOR i=0 TO 7
  295.      POKE offset+&H03+i,ASC(MID$(i$,i+1,1))
  296.     NEXT
  297.     POKEI offset+&H0B,512
  298.     POKE  offset+&H0D,fSekProCluster
  299.     POKEI offset+&H0E,1
  300.     POKE  offset+&H10,1
  301.     POKEI offset+&H11,112
  302.     POKEI offset+&H13,fSektoren
  303.     POKE  offset+&H15,&HF8
  304.     POKEI offset+&H16,fFATSektoren
  305.     POKEI offset+&H18,fSektoren/fTracks/fHeads
  306.     POKEI offset+&H1A,fHeads
  307.     POKEI offset+&H1C,1
  308.     FOR i=&H1E TO &HFF
  309.      POKE offset+i,0
  310.     NEXT
  311.     CALL XWrite(0,1)
  312.  
  313.     REM File Allocation Table schreiben
  314.     FOR i=0 TO fFATSektoren*512
  315.      POKE offset+i,0
  316.     NEXT
  317.     POKE offset+0,&HFB
  318.     POKE offset+1,&HFF
  319.     CALL XWrite(1,fFATSektoren)
  320.  
  321.     REM Hauptverzeichnis
  322.     FOR i=0 TO 2048
  323.      POKE offset+i,0
  324.     NEXT
  325.     n$="EMPTY DISK "+CHR$(8)+CHR$(0)
  326.     FOR i=0 TO 12
  327.      POKE offset+i,ASC(MID$(n$,i+1,1))
  328.     NEXT
  329.     CALL XWrite(fFATSektoren+1,4)
  330.     CALL Update
  331.     ende1=0
  332.    ELSEIF i$="N" OR (t<>0 AND my=10 AND mx>=28 AND mx<=37) THEN
  333.     ende1=0
  334.    END IF
  335.   WEND
  336. Okay:
  337.   CALL Balken(11,1,stasten$)
  338.   CALL EntfBalken(21,1)
  339.   CALL EntfBalken(22,1)
  340.  ELSE
  341.   SOUND 2000,2
  342.  END IF
  343. END SUB
  344.  
  345. SUB XWrite(sektor,length) SHARED
  346.  POKEI offset+%A1,1
  347.  POKEI offset+%A2,length
  348.  POKEI offset+%A3,sektor
  349.  CALL CallAndWait
  350. END SUB
  351.  
  352. SUB Format(spur) SHARED
  353.  POKEI offset+%A1,10
  354.  POKEI offset+%A2,spur
  355.  CALL CallAndWait
  356. END SUB
  357.  
  358. SUB Copy(spur,ziel) SHARED
  359.  POKEI offset+%A1,20
  360.  POKEI offset+%A2,spur
  361.  POKEI offset+%A3,ziel
  362.  CALL CallAndWait
  363. END SUB
  364.  
  365. SUB Update SHARED
  366.  POKEI offset+%A1,3
  367.  CALL CallAndWait
  368. END SUB
  369.  
  370. SUB SelectDrive(num) SHARED
  371.  POKEI offset+%A1,100
  372.  POKEI offset+%A2,num
  373.  CALL CallAndWait
  374. END SUB
  375.  
  376. FUNCTION MouseExist PUBLIC
  377.  DEF SEG = 0
  378.  mouseseg& = PEEK(206) + 256 * PEEK(207)
  379.  mouseofs& = PEEK(204) + 256 * PEEK(205)
  380.  DEF SEG = mouseseg&
  381.  
  382.  IF (mouseseg& = 0 AND mouseofs& = 0) OR PEEK(mouseofs&) = 207 THEN
  383.    i = 0
  384.    DEF SEG
  385.  ELSE
  386.    REG %AX,0
  387.    CALL INTERRUPT &H33
  388.    i = REG(%AX)
  389.    IF i<>0 THEN
  390.     REG %AX,1
  391.     CALL INTERRUPT &H33
  392.    END IF
  393.  END IF
  394.  DEF SEG
  395.  MouseExist = i
  396. END FUNCTION
  397.  
  398. FUNCTION Click SHARED
  399.  CALL MouseStatus(dummy,dummy,ctest)
  400.  Click=ctest
  401. END FUNCTION
  402.  
  403. SUB MouseOff PUBLIC
  404.  REG %AX,0
  405.  CALL INTERRUPT &H33
  406. END SUB
  407.  
  408. SUB MouseStatus(x,y,t) PUBLIC
  409.  REG %AX,3
  410.  CALL INTERRUPT &H33
  411.  x = REG(%CX)
  412.  y = REG(%DX)
  413.  t = REG(%BX) AND 3
  414. END SUB
  415.  
  416. SUB MouseWait PUBLIC
  417.  qq=1
  418.  WHILE qq<>0
  419.   CALL MouseStatus(dummy,dummy,qq)
  420.  WEND
  421. END SUB
  422.  
  423.